#include "mySort.h"
#include <iostream>
#include <string>
#include <cmath>
MySort::MySort()
{
  num=0;
  origin=NULL;
}
MySort::MySort(int num, int* origin)
{
    this->num=num;
    this->origin=new int[num];
   for(int i=0;i<num;i++)
   {
     this->origin[i]=origin[i];
   }
}

MySort::~MySort(){

}

void MySort::changeSwap(int& a, int& b){

}

string MySort::printNum()
{
  for (int i = 0; i < num-1; i++)
	{
		cout << origin[i] << " ";
	}
	cout << origin[num - 1] << endl;
	return "\0";
}

string MySort::paritySort()//奇偶排序，先奇位置上的数字与下一位置的数字比较，之后偶数位置.....
{
    int jiou=0;
   if(num%2==0)
   {
    jiou=1;//个数为奇位数和偶位数，在讨论奇偶排序时边界不同
   }
   int p=1;//判断是奇排序还是偶排序
   int q=1;//判断还有没有交换
   while(q)
   {
    int t=0;
    if(p)
    {
        p=0;
        int temp;
        if(jiou==1) temp=num-1;
        else temp=num;
        //从奇位数字开始排序
        for(int i=1;i<temp;i+=2)
        {
            if(origin[i]>origin[i+1])
            {
                swap(origin[i],origin[i+1]);
                printNum();
                t++;
            }
        }
    }
    else
    {
       p=1;
       int temp;
       if(jiou==1) temp=num;
       else temp=num-1;
       //从偶位数字开始排序
       for(int i=0;i<temp;i+=2)
       {
        if(origin[i]>origin[i+1])
            {
                swap(origin[i],origin[i+1]);
                printNum();
                t++;
            }
       }
       
    }
    if(t==0) q=0;//一定放在if外面
   }
   return "\0";
}

string MySort::bubbleSort()//双向冒泡排序，先逆向冒泡，再正向冒泡，再逆向....直到没有交换为止
{
   int p=1;//判断是正向冒泡还是逆向冒泡
   int q=1;//判断还有没有交换
   while(q)
   {
      if(p)
      {
        p=0;
        int t=0;
        for(int i=0;i<num-1;i++)
        {
            if(origin[i]>origin[i+1])
            {
                swap(origin[i],origin[i+1]);
                printNum();
                t++;
            }
        }
        if(t==0)
        {
            q=0;
        }
      }
      else
      {
        p=1;
        int t=0;
        for(int i=num-1;i>0;i--)
        {
            if(origin[i]<origin[i-1])
            {
                swap(origin[i],origin[i-1]);
                printNum();
                t++;
            }
        }
        
        if(t==0)
        q=0;
      }
   }
   return "\0";
}
